package nextfm.bean;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIParameter;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.servlet.http.HttpSession;

import nextfm.dao.DAOUsuario;
import nextfm.model.Administrador;
import nextfm.model.Usuario;

public class AdministradorBean {

	DAOUsuario daoUsuario = new DAOUsuario();
	int id;
	String nome;
	String login;
	String email;
	String senha;
	String pin;
	Administrador administradorSelecionado;
	boolean exibirPanel;
	boolean exibirPanelAtualizacao;
	List<Administrador> administradores = daoUsuario.findAllAdministradores();
	private int scrollerPage = 1;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getLogin() {
		return login;
	}

	public void setLogin(String login) {
		this.login = login;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getSenha() {
		return senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getPin() {
		return pin;
	}

	public void setPin(String pin) {
		this.pin = pin;
	}

	public Administrador getAdministradorSelecionado() {
		return administradorSelecionado;
	}

	public void setAdministradorSelecionado(Administrador administradorSelecionado) {
		this.administradorSelecionado = administradorSelecionado;
	}

	public List<Administrador> getAdministradores() {
		return administradores;
	}

	public void setAdministradores(List<Administrador> administradores) {
		this.administradores = administradores;
	}

	public int getScrollerPage() {
		return scrollerPage;
	}

	public void setScrollerPage(int scrollerPage) {
		this.scrollerPage = scrollerPage;
	}

	public boolean isExibirPanel() {
		return exibirPanel;
	}

	public void setExibirPanel(boolean exibirPanel) {
		this.exibirPanel = exibirPanel;
	}

	public boolean isExibirPanelAtualizacao() {
		return exibirPanelAtualizacao;
	}

	public void setExibirPanelAtualizacao(boolean exibirPanelAtualizacao) {
		this.exibirPanelAtualizacao = exibirPanelAtualizacao;
	}

	public String remover() {
		try {
			System.out.println("Removendo administrador de id" + getId());
			Usuario administrador = daoUsuario.find(getId());
			HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

			if (session != null) {
				
				Administrador logado = (Administrador) session.getAttribute("administrador");
				
				if (administrador.getId() != logado.getId()) {
					daoUsuario.begin();
					daoUsuario.remove(administrador);
					daoUsuario.commit();
					return "success";
				}
				else {
					System.out.println("impossível remover administrador da sessão!");
					return "failure";
				}
			}

			else {
				return "false";
			}
		}

		catch (Exception e) {
			return "failure";
		}
	}

	public String editar() {

		try {
			Administrador administrador = (Administrador) daoUsuario.find(getId());
			administrador.setEmail(getEmail());
			administrador.setLogin(getLogin());
			administrador.setNome(getNome());
			System.out.println("Editando usuário de id " + getId());
			daoUsuario.begin();
			daoUsuario.merge(administrador);
			daoUsuario.commit();
			HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
			Administrador logado = (Administrador) session.getAttribute("administrador");
			if (administrador.getId() == logado.getId()) {
				session.setAttribute("administrador", administrador);
			}
			return "success";
		}

		catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage("Nome de administrador já existente");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			FacesContext fc = FacesContext.getCurrentInstance();
			fc.addMessage("atualizacao", msg);
			setExibirPanelAtualizacao(true);
			return "failure";
		}

	}

	public String cadastrar() {
		try {
			System.out.println("Adicionando administrador " + getNome());
			Administrador administrador = new Administrador(getNome(), getLogin(), getSenha(), getEmail(), getPin());
			daoUsuario.begin();
			daoUsuario.persist(administrador);
			daoUsuario.commit();
			return "success";
		}

		catch (Exception e) {
			e.printStackTrace();
			FacesMessage msg = new FacesMessage("Nome de administrador já existente");
			msg.setSeverity(FacesMessage.SEVERITY_ERROR);
			FacesContext fc = FacesContext.getCurrentInstance();
			fc.addMessage("cadastro", msg);
			setExibirPanel(true);
			return "failure";
		}
	}

	public void selecionarAdministrador(ActionEvent evento){  
		UIParameter component = (UIParameter) evento.getComponent().findComponent("codigoEdicao");  
		int codigo = Integer.parseInt(component.getValue().toString());   
		setAdministradorSelecionado((Administrador) daoUsuario.find(codigo));
		setEmail(administradorSelecionado.getEmail());
		setLogin(administradorSelecionado.getLogin());
		setNome(administradorSelecionado.getNome());
		setId(codigo);
	}

}
